/**
 * This program is free software, you can redistribute it and/or modify.
 * Copyright (c) 2025 Huawei Technologies Co., Ltd.
 * This file is a part of the CANN Open Software.
 * Licensed under CANN Open Software License Agreement Version 2.0 (the "License").
 * Please refer to the License for details. You may not use this file except in compliance with the License.
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
 * See LICENSE in the root of the software repository for the full text of the License.
 */

/*!
 * \file flash_attention_score_template_tiling_key.h
 * \brief
 */

#pragma once
#include "ascendc/host_api/tiling/template_argument.h"

// kernel通过宏定义隔离dtype编译tilingkey，降低耗时。tiling侧没有相关宏
#ifndef ORIG_DTYPE_QUERY
#define ORIG_DTYPE_QUERY (-1)
#endif

#define ASCENDC_TPL_1_BW 1
#define ASCENDC_TPL_3_BW 3
#define ASCENDC_TPL_10_BW 10
#define ASCENDC_TPL_12_BW 12

// 可表示的tilingkey范围为64bit，注意不能超过限制
ASCENDC_TPL_ARGS_DECL(FlashAttentionScore, // 算子唯一标识，可以opType保持一致
    // bit:3-0 1: 空tensor场景
    ASCENDC_TPL_UINT_DECL(KernelTypeKey, ASCENDC_TPL_4_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    //bit:7-4 UB0 
    //          0：B
    //          1：N2
    //          2：G
    //          3：S1
    //          4：S2
    //          5：D
    //          9：NONE
    ASCENDC_TPL_UINT_DECL(UB0, ASCENDC_TPL_4_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2, 3, 4, 5, 9),

    //bit:11-8 UB1 
    //          0：B
    //          1：N2
    //          2：G
    //          3：S1
    //          4：S2
    //          5：D
    //          9：NONE
    ASCENDC_TPL_UINT_DECL(UB1, ASCENDC_TPL_4_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2, 3, 4, 5, 9),

    //bit:15-12 Block 
    //          0：B
    //          1：N2
    //          2：G
    //          3：S1
    //          4：S2
    //          5：D
    //          9：NONE
    ASCENDC_TPL_UINT_DECL(Block, ASCENDC_TPL_4_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2, 3, 4, 5, 9),

    // bit:17-16 ImplMode 
    //          0: AA_HIGH_PRECISION
    //          1: AA_HIGH_PERFORMANCE
    //          2: AA_INVALID_LINE_HIGH_PRECISION
    ASCENDC_TPL_UINT_DECL(ImplMode, ASCENDC_TPL_2_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2),

    // bit:19-18 DataType 
    //          0：FLOAT16
    //          1：FLOAT32
    //          2：BFLOAT16
    //          3：FLOAT16_PRECISION
    ASCENDC_TPL_UINT_DECL(DataType, ASCENDC_TPL_2_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2, 3),

    // bit:22-20 Layout 
    //          0: NONE
    //          1: BSH 
    //          2: SBH
    //          3: BNSD
    //          4: TND  
    ASCENDC_TPL_UINT_DECL(Layout, ASCENDC_TPL_3_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2, 3, 4),

    // bit:23 Bmm1Format
    //          0：ND
    //          1：NZ
    ASCENDC_TPL_UINT_DECL(Bmm1Format, ASCENDC_TPL_1_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    // bit:24 Bmm2Source
    //          0：GM
    //          1：L1
    ASCENDC_TPL_UINT_DECL(Bmm2Source, ASCENDC_TPL_1_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    // bit:28-25 Sparse
    //          0：ALL
    //          1：NONE
    //          2：ANY
    //          3：CAUSAL
    //          4：BAND
    //          5：PREFIX
    //          6：BAND_COMPRESS
    //          7：RIGHT_DOWN_CAUSAL
    //          8：RIGHT_DOWN_CAUSAL_BAND
    //          9：BAND_LEFT_UP_CAUSAL
    ASCENDC_TPL_UINT_DECL(Sparse, ASCENDC_TPL_4_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9),

    // bit:30-29 BigDoubleBuffer
    //          0: NONE
    //          1：BIG_BUFFER
    //          2：BIG_DOUBLE_BUFFER
    ASCENDC_TPL_UINT_DECL(BigDoubleBuffer, ASCENDC_TPL_2_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2),

    // bit:31 HasDropOut
    //          0：False
    //          1：True
    ASCENDC_TPL_UINT_DECL(HasDropOut, ASCENDC_TPL_1_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    // bit:32 HasAttenMask
    //          0：False
    //          1：True
    ASCENDC_TPL_UINT_DECL(HasAttenMask, ASCENDC_TPL_1_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    // bit:33 HasPse
    //          0：False
    //          1：True
    ASCENDC_TPL_UINT_DECL(HasPse, ASCENDC_TPL_1_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    // bit:34 EnableL1Reuse
    //          0：False
    //          1：True
    ASCENDC_TPL_UINT_DECL(EnableL1Reuse, ASCENDC_TPL_1_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    // bit:35 HasRope
    //          0：False
    //          1：True
    ASCENDC_TPL_UINT_DECL(HasRope, ASCENDC_TPL_1_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    // bit:36 MatmulPolicyType
    //          0：MATMUL_POLICY_NORMAL
    //          1：MATMUL_POLICY_UNSPLITK
    ASCENDC_TPL_UINT_DECL(MatmulPolicyType, ASCENDC_TPL_1_BW, ASCENDC_TPL_UI_LIST, 0, 1),

    // bit:40-37 S1TemplateType
    //          0：S_TEMPLATE_UNKNOW
    //          1：ALIGNED_16
    //          2：ALIGNED_32
    //          3：ALIGNED_48
    //          4：ALIGNED_64
    //          5：ALIGNED_80
    //          6：ALIGNED_96
    //          7：ALIGNED_112
    //          8：ALIGNED_128
    ASCENDC_TPL_UINT_DECL(S1TemplateType, ASCENDC_TPL_4_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2, 3, 4, 5, 6, 7, 8),

    // bit:44-41 S2TemplateType
    //          0：S_TEMPLATE_UNKNOW
    //          1：ALIGNED_16
    //          2：ALIGNED_32
    //          3：ALIGNED_48
    //          4：ALIGNED_64
    //          5：ALIGNED_80
    //          6：ALIGNED_96
    //          7：ALIGNED_112
    //          8：ALIGNED_128
    ASCENDC_TPL_UINT_DECL(S2TemplateType, ASCENDC_TPL_4_BW, ASCENDC_TPL_UI_LIST, 0, 1, 2, 3, 4, 5, 6, 7, 8),

    // bit:48-45 DTemplateType
    //          0：D_TEMPLATE_UNKNOW
    //          5：ALIGNED_80
    //          6：ALIGNED_96
    //          8：ALIGNED_128
    ASCENDC_TPL_UINT_DECL(DTemplateType, ASCENDC_TPL_4_BW, ASCENDC_TPL_UI_LIST, 0, 5, 6, 8),
);

ASCENDC_TPL_SEL(
    // FP16    96 = 2*3*2*2*2*2 S1S2模板
    #if (ORIG_DTYPE_QUERY == -1) || (ORIG_DTYPE_QUERY == DT_FLOAT16)
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),
    
    // FP16    96 = 2*3*2*2*2*2 S1S2模板 Bmm1-NZ
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP16    288 = 2*3*2*2*2*2*3 S1模板 当Bmm2Source取1时，EnableL1Reuse只能为0
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP16    288 = 2*3*2*2*2*2*3 S1模板 当Bmm2Source取1时，EnableL1Reuse只能为0
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP16    48 = 2*3*2*2*2 B模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP16    48 = 2*3*2*2*2 sameAB模板 Bmm1-NZ
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP16    48 = 2*3*2*2*2 sameAB模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP16    16 = 2*2*2*2 sameAB模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP16    16 = 2*2*2*2 TND模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP16    1 TND ROPE模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),


    // FP16    8 = 2*2*2 TNDSameAB模板
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),
    #endif

    // BF16    96 = 2*3*2*2*2*2 S1S2模板
    #if (ORIG_DTYPE_QUERY == -1) || (ORIG_DTYPE_QUERY == DT_BF16)
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    96 = 2*3*2*2*2*2 S1S2模板 Bmm1-NZ
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    288 = 2*3*2*2*2*2*3 S1模板 当Bmm2Source取1时，EnableL1Reuse只能为0
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    288 = 2*3*2*2*2*2*3 S1模板 当Bmm2Source取1时，EnableL1Reuse只能为0
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    2 S1模板 layout=1 scalar const 128_128_80
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),
    
    // BF16    2 S1模板 layout=1 scalar const 128_128_96
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 6),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    2 S1模板 layout=1 scalar const 128_128_128
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    2 S1模板 layout=2 scalar const 128_128_96
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 8),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 6),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    48 = 2*3*2*2*2 B模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    1 B模板 const 16_16_80
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    1 B模板 const 32_32_80
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    1 B模板 const 48_48_80
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    1 B模板 const 64_64_80
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    1 B模板 const 16_16_96
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 6),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    1 B模板 const 32_32_96
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 6),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    48 = 2*3*2*2*2 samAB模板 Bmm1-NZ
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    48 = 2*3*2*2*2 samAB模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    16 = 2*2*2*2 samAB模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    16 = 2*2*2*2 TND模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    1 TND ROPE模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    8 = 2*2*2 TNDSameAB模板
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // BF16    1 TNDSameAB ROPE模板
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),
    #endif

    // FP32    48 = 2*3*2*2*2 S1S2模板
    #if (ORIG_DTYPE_QUERY == -1) || (ORIG_DTYPE_QUERY == DT_FLOAT)
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP32    48 = 2*3*2*2*2 S1S2模板 Bmm1-NZ
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP32    48 = 2*3*2*2*2 S1模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 5),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP32    48 = 2*3*2*2*2 B模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 1, 2, 3),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),

    // FP32    16 = 2*2*2*2 TND模板 
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 3),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 9),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0, 2),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 4),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 2),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0, 1),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),
    #endif

    // 空tensor
    ASCENDC_TPL_ARGS_SEL(
        ASCENDC_TPL_UINT_SEL(KernelTypeKey, ASCENDC_TPL_UI_LIST, 1),
        ASCENDC_TPL_UINT_SEL(UB0, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(UB1, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Block, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(ImplMode, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DataType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Layout, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm1Format, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Bmm2Source, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(Sparse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(BigDoubleBuffer, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasDropOut, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasAttenMask, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasPse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(EnableL1Reuse, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(HasRope, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(MatmulPolicyType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S1TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(S2TemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_UINT_SEL(DTemplateType, ASCENDC_TPL_UI_LIST, 0),
        ASCENDC_TPL_TILING_STRUCT_SEL(FlashAttentionScoreGeneralTilingData)
    ),
);
